//测试protobuf

#include"test.pb.h"
#include<iostream>
#include<string>
using namespace fixbug;
using namespace google;
using namespace protobuf;
// using namespace std;

//序列化：网络中不能发送一个对象，序列化把对象转换成有序字节流或者字符流便于在网络中传输
//反序列化：客户端从文件中或网络上获得序列化后的对象字节流，根据字节流中所保存的对象状态及描述信息，通过反序列化重建对象。




//对比于第一次proto
// int main()
// {
//     // 封装了login请求对象的数据
//     fixbug::LoginRequest req;
//     req.set_name("zhang san");
//     req.set_pwd("123456");

//     // 对象数据序列化 =》 char*
//     std::string send_str;
//     if (req.SerializeToString(&send_str))
//     {
//         std::cout << send_str.c_str() << std::endl;
//     }

//     // 从send_str反序列化一个login请求对象
//     fixbug::LoginRequest reqB;
//     if (reqB.ParseFromString(send_str))
//     {
//         std::cout << reqB.name() << std::endl;
//         std::cout << reqB.pwd() << std::endl;
//     }

//     return 0;
// }


//对比第二次proto
int main(){
    fixbug::LoginRequest req;
    req.set_name("zhangshan");
    req.set_pwd("123456");
    std::string send_str;
    req.SerializeToString(&send_str);
    std::cout<<send_str<<std::endl;

    fixbug::LoginRequest reqB;
    if(reqB.ParseFromString(send_str)){
        std::cout<<reqB.name()<<reqB.pwd()<<std::endl;
    }

    fixbug::LoginResponse rsp;
    
    //设置复合类型的方法
    fixbug::ResultCode* rc  = rsp.mutable_result();
    rc->set_errcode(0);  //没有错误
    rsp.set_success(1);
    rsp.SerializeToString(&send_str);
    std::cout<<"复合类型"<<send_str<<std::endl;


    //设置列表的方法
    fixbug::GetFriendListsResponse getrsp;
    rc  =  getrsp.mutable_result();
    rc->set_errcode(0);

    User* user1 = getrsp.add_friend_list();
    user1->set_age(20);
    user1->set_name("zhang san");
    user1->set_sex(User::MAN);

    getrsp.SerializeToString(&send_str);
    std::cout<<send_str<<std::endl;

    //查看列表大小
    std::cout<<getrsp.friend_list_size()<<std::endl;
     





     


    


}